
#include "display.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 1024

//Divers :
//-V, --version afficher le nom et la version du logiciel
void displayVersion()
{
}
//--help afficher l'aide et quitter
void displayHelp()
{
}
//--mmap ignorée (pour rétro-compatibilité)

//Output control:
//-n, --line-number         print line number with output lines
void displayLineNumber(const result_t* pRes)
{
}
//--line-buffered       flush output on every line
//-H, --with-filename       print the file name for each match
void displayFileName(const result_t* pRes)
{
}
//-h, --no-filename         suppress the file name prefix on output
void displayNoFileNamePrefix(const result_t* pRes)
{
}
//    --label=LABEL         use LABEL as the standard input file name prefix
void displayLabel(const result_t* pRes, const char* pLabel)
{
}
//-o, --only-matching       affiche la partie de ligne seule concordant avec MOTIF
void displayOnlyMatching(const result_t* pRes, const char* pStrToMatch)
{
}
//-L, --files-without-match affiche seulement les noms de fichiers sans concordances
void displayNotMatchingFiles(const result_t* pRes)
{
}
//-l, --files-with-matches affiche seulement les noms de fichiers avec concordances
void displayMatchingFiles(const result_t* pRes)
{
}
//-c, --count affiche seulement le compte des lignes concordantes par fichier
void displayCount(const result_t* pRes)
{
}
//-T, --initial-tab	insérer des tabulations (si besoin)
void displayTab(char* fileName, int lineNumber, char* string)
{
    printf("\t");
}
//-Z, --null sort l'octet 0 après le nom de fichier
//

//Contrôle de contexte :
//-B, --before-context=NUM 	affiche NUM lignes de contexte avant
void displayContextBefore(int pNum, char* pPath, int pLineNumber )
{
    FILE * file = fopen(pPath, "r");
    char* line = malloc(sizeof(char) * MAX_SIZE);
    int lineNumber = 0;
    if (file != NULL)
    {
        while( (pLineNumber-pNum) < 0 ) //Allow not to print before the first line
        {
            pNum--;
        }
        while( NULL != fgets(line, MAX_SIZE, file) )
        {
            ++lineNumber;
            if( lineNumber == (pLineNumber-pNum) )
            {
                printf("%s:%i %s", pPath, pLineNumber-pNum, line );
                if (0 != pNum)
                {
                    pNum--;
                }
            }
        }
    }
}
//-A, --after-context=NUM 	affiche NUM lignes de contexte après
void displayContextAfter(int pNum, char* pPath, int pLineNumber )
{
    FILE * file = fopen(pPath, "r");
    char* line = malloc(sizeof(char) * MAX_SIZE);
    int lineNumber = 0;
    int number = 0;
    if (file != NULL)
    {
        while( NULL != fgets(line, MAX_SIZE, file) )
        {
            ++lineNumber;
            if( lineNumber == (pLineNumber+number) )
            {
                printf("%s:%i %s", pPath, pLineNumber+number, line );
                if (pNum != number)
                {
                    number++;
                }
            }
        }
    }
}
//-C, --context=NUM 		affiche NUM lignes de contexte en sortie
void displayContextOutput(int pNum, char* pPath, int pLineNumber )
{
    FILE * file = fopen(pPath, "r");
    char* line = malloc(sizeof(char) * MAX_SIZE);
    int lineNumber = 0;
    int numberBefore = pNum;
    int numberAfter = 0;
    if (file != NULL)
    {
        while( (pLineNumber-numberBefore+numberAfter) < 0)
        {
            numberBefore--;
        }
        while( NULL != fgets(line, MAX_SIZE, file) )
        {
            ++lineNumber;
            if( lineNumber == (pLineNumber-numberBefore+numberAfter) )
            {
                printf("%s:%i %s", pPath, pLineNumber-numberBefore+numberAfter, line );
                if (0 != numberBefore)
                {
                    numberBefore--;
                }
                if (pNum != numberAfter)
                {
                    numberAfter++;
                }
            }
        }
    }
}
//-NUM 				comme --context=NUM
//	--color[=QUAND], --colour[=QUAND] met en évidence les concordances

//			QUAND vaut "always" (toujours), "nevers" (jamais) ou "auto"
void displayColor(char text[], char path[])
{
    printf ("\033[35m%s\033[31%sm\033[0m\n", path, text);
}
